package singleton;

public class Single {

//    // 1.饿汉模式
//    private static Single single = new Single();
//
//    private Single() {
//    }
//
//    public static Single getInstance() {
//        return single;
//    }

    // 2.懒汉模式
//    private volatile static Single single;
//
//    private Single() {
//    }
//
//    public static Single getInstance() {
//        if (single == null) {
//            synchronized (Single.class) {
//                if (single == null) {
//                    // 非原子操作
//                    single = new Single();
//                }
//            }
//        }
//        return single;
//    }

    // 3.静态内部类
    private static class SingletonHolder {
        private static final Single INSTANCE = new Single();
    }

    private Single() {
    }

    public static Single getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
